GtkListBox: Fix a bug in unselection
authorMatthias Clasen <mclasen@redhat.com>
Sat, 1 Nov 2014 02:34:09 +0000 (22:34 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 1 Nov 2014 02:34:09 +0000 (22:34 -0400)
Ensure that gtk_list_box_get_selected_row returns NULL after
gtk_list_box_unselect_all. Add a testcase that detects this
problem.

gtk/gtklistbox.c
testsuite/gtk/listbox.c

index 5b0422371c556f8877ee7ed81649776e6c5982a8..0d421176409fb849b49583165ba6baca6734fa33 100644 (file)
@@ -1449,6 +1449,8 @@ gtk_list_box_unselect_all_internal (GtkListBox *box)
       dirty |= gtk_list_box_row_set_selected (row, FALSE);
     }
 
+  BOX_PRIV (box)->selected_row = NULL;
+
   return dirty;
 }
 
index ce1fca867f00cbe26ee4f85dd10d24815f510145..e868f9ae9efba26e93dce27ab2786276844698b7 100644 (file)
@@ -137,11 +137,17 @@ test_selection (void)
   g_assert_cmpint (count, ==, 1);
   row2 = gtk_list_box_get_selected_row (list);
   g_assert (row2 == row);
+  gtk_list_box_unselect_all (list);
+  row2 = gtk_list_box_get_selected_row (list);
+  g_assert (row2 == NULL);
+  gtk_list_box_select_row (list, row);
+  row2 = gtk_list_box_get_selected_row (list);
+  g_assert (row2 == row);
 
   gtk_list_box_set_selection_mode (list, GTK_SELECTION_BROWSE);
   gtk_container_remove (GTK_CONTAINER (list), GTK_WIDGET (row));
   g_assert (callback_row == NULL);
-  g_assert_cmpint (count, ==, 2);
+  g_assert_cmpint (count, ==, 4);
   row2 = gtk_list_box_get_selected_row (list);
   g_assert (row2 == NULL);
 
@@ -149,12 +155,12 @@ test_selection (void)
   gtk_list_box_select_row (list, row);
   g_assert (gtk_list_box_row_is_selected (row));
   g_assert (callback_row == row);
-  g_assert_cmpint (count, ==, 3);
+  g_assert_cmpint (count, ==, 5);
 
   gtk_list_box_set_selection_mode (list, GTK_SELECTION_NONE);
   g_assert (!gtk_list_box_row_is_selected (row));
   g_assert (callback_row == NULL);
-  g_assert_cmpint (count, ==, 4);
+  g_assert_cmpint (count, ==, 6);
   row2 = gtk_list_box_get_selected_row (list);
   g_assert (row2 == NULL);